/**
 * 文件级注释：
 * 支付平台管理服务封装，提供平台列表查询与新增能力。
 * 所有接口遵循前端成功判断：仅当返回值 `code === 0` 视为成功。
 */

import http from '../api/http'
import type { ApiResult } from './types'

/**
 * 类级注释：支付平台响应类型（与后端 PaymentPlatform 对齐，字段尽量可选以兼容）
 */
export interface PaymentPlatformResponse {
  /** 支付平台ID */
  id?: string
  /** 名称 */
  name?: string
  /** 平台编号 */
  code?: string
  /** 备注 */
  description?: string
  /** 是否接单 */
  acceptOrder?: boolean
  /** 收单服务商ID */
  acqSpId?: string
  /** 应用ID */
  appId?: string
  /** 回调URL */
  callbackUrl?: string
  /** 密钥 */
  secretKey?: string
  /** 虚拟余额（单位分） */
  virtualBalance?: number
  /** 扩展属性（JSON或字符串） */
  extraProperties?: string
  /** 创建时间 */
  creationTime?: string
  /** 启用状态 */
  enableStatus?: number
  /** 激活状态 */
  activationStatus?: number
  /** 商户类型 */
  merchantType?: number
  /** 提现方式 */
  withdrawalMethod?: number
  /** 并发标记 */
  concurrencyStamp?: string
}

/**
 * 类级注释：支付平台新增请求体（与 PaymentPlatformCreateRequestDto 对齐）
 */
export interface PaymentPlatformCreateRequest {
  /** 名称（必填） */
  name: string
  /** 备注 */
  description?: string
  /** 收单服务商ID */
  acqSpId?: string
  /** 应用ID */
  appId?: string
  /** 回调URL */
  callbackUrl?: string
  /** 密钥 */
  secretKey?: string
  /** 扩展属性（JSON字符串或其他） */
  extraProperties?: string
}

/**
 * 类级注释：支付平台管理服务类
 */
export class PaymentPlatformService {
  /**
   * 函数级注释：获取支付平台列表（GET 请求）
   * @param page 页码，默认 1
   * @param limit 每页条数，默认 10
   * @param key 可选的名称关键字，用于模糊搜索
   * @returns ApiResult<{ total: number; data: PaymentPlatformResponse[] }>
   * @throws 可能抛出网络请求异常（axios 错误）
   */
  static async getPaymentPlatformList(
    page: number = 1,
    limit: number = 10,
    key?: string
  ): Promise<ApiResult<{ total: number; data: PaymentPlatformResponse[] }>> {
    // 使用与后端控制器一致的小写参数名：page/limit/key
    const params: Record<string, any> = { page, limit }
    if (typeof key === 'string' && key.trim()) params.key = key.trim()
    const resp = await http.get<ApiResult<{ total: number; data: PaymentPlatformResponse[] }>>(
      '/Payment/GetPaymentPlatformList',
      { params }
    )
    return resp.data
  }

  /**
   * 函数级注释：新增支付平台
   * @param data 新增请求体（名称必填，其他字段按需填写）
   * @returns ApiResult<any> 后端统一返回结构（可能包含新建结果或影响行数）
   * @throws 可能抛出网络请求异常（axios 错误）
   */
  static async addPaymentPlatform(data: PaymentPlatformCreateRequest): Promise<ApiResult<any>> {
    const resp = await http.post<ApiResult<any>>('/Payment/AddPaymentPlatform', data)
    return resp.data
  }
}
